"""
音画同步服务接口
"""
from abc import ABC, abstractmethod
from typing import Dict, Any, List, Optional, Tuple
from app.services.base_service import BaseService


class ISyncService(BaseService, ABC):
    """
    音画同步服务接口，定义音画同步的功能
    """
    
    @abstractmethod
    def add_sync_item(self, speech: str, video: str, keyword: str) -> None:
        """
        添加音画同步项目
        
        @param speech: 话术
        @param video: 视频
        @param keyword: 关键词
        """
        pass
    
    @abstractmethod
    def remove_sync_item(self, index: int) -> bool:
        """
        移除音画同步项目
        
        @param index: 项目索引
        @return: 是否成功移除
        """
        pass
    
    @abstractmethod
    def get_sync_items(self) -> List[Tuple[str, str, str]]:
        """
        获取所有音画同步项目
        
        @return: 音画同步项目列表，每个项目为 (话术, 视频, 关键词) 的元组
        """
        pass
    
    @abstractmethod
    def clear_sync_items(self) -> None:
        """
        清空所有音画同步项目
        """
        pass
    
    @abstractmethod
    def enable_sync(self, enabled: bool) -> None:
        """
        启用或禁用音画同步
        
        @param enabled: 是否启用
        """
        pass
    
    @abstractmethod
    def is_sync_enabled(self) -> bool:
        """
        检查音画同步是否启用
        
        @return: 是否启用
        """
        pass
    
    @abstractmethod
    def match_keyword(self, text: str) -> Optional[Tuple[str, str, str]]:
        """
        匹配关键词
        
        @param text: 要匹配的文本
        @return: 匹配到的项目 (话术, 视频, 关键词)，如果没有匹配到则返回 None
        """
        pass
    
    @abstractmethod
    def save_sync_items(self, file_path: Optional[str] = None) -> bool:
        """
        保存音画同步项目到文件
        
        @param file_path: 文件路径，如果为 None 则使用默认路径
        @return: 是否成功保存
        """
        pass
    
    @abstractmethod
    def load_sync_items(self, file_path: Optional[str] = None) -> bool:
        """
        从文件加载音画同步项目
        
        @param file_path: 文件路径，如果为 None 则使用默认路径
        @return: 是否成功加载
        """
        pass
    
    @abstractmethod
    def configure(self, config: Dict[str, Any]) -> None:
        """
        配置音画同步服务
        
        @param config: 配置信息
        """
        pass 